package com.example.secondhand.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.example.secondhand.common.enums.ErrorMsg;

/**
 * @param <T> 封装接口返回的统一格式数据  相当于 Result类
 */
@JsonInclude(value = JsonInclude.Include.NON_NULL)//在序列化对象时，只有属性值不为 null 的字段才会被包含在结果中
public class ResultVo<T> {//T泛型

    private Integer status_code;//状态码，返回请求结果
    private String msg;//消息，存储接口返回的消息内容
    private T data;//数据，存储接口返回的具体数据对象

    //直接返回成功状态码--只包含成功状态码的 ResultVo 对象
    public static ResultVo success(){
        ResultVo resultVo=new ResultVo();
        resultVo.setStatus_code(1);
        return resultVo;
    }

    //返回成功状态码的同时返回对象--包含成功状态码和具体数据的 ResultVo 对象
    public static <T>ResultVo success(T data){
        ResultVo<T> resultVo=new ResultVo<>();
        resultVo.setStatus_code(1);
        resultVo.setData(data);//具体数据
        return resultVo;
    }

    //返回 错误状态码 错误信息 的错误对象
    public static ResultVo fail(ErrorMsg errorMsg){
        ResultVo resultVo=new ResultVo();
        resultVo.setStatus_code(0);
        resultVo.setMsg(errorMsg.getMsg());
        return resultVo;
    }

    //返回 错误状态码 错误信息 具体数据 的错误对象
    public static <T>ResultVo fail(ErrorMsg errorMsg,T data){
        ResultVo<T> resultVo=new ResultVo<>();
        resultVo.setStatus_code(0);
        resultVo.setMsg(errorMsg.getMsg());
        resultVo.setData(data);
        return resultVo;
    }

    public Integer getStatus_code() {
        return status_code;
    }

    public void setStatus_code(Integer status_code) {
        this.status_code = status_code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    //带参数的构造函数
    public ResultVo(Integer status_code, String msg, T data) {
        this.status_code = status_code;
        this.msg = msg;
        this.data = data;
    }
    //不带参数的构造函数
    public ResultVo() {
    }
}
